// 方式一：
function setFormat(formatLeft,formatRight) {
    let Time = new Date()
    let year = Time.getFullYear()
    let Month = Time.getMonth()+1
    let day = Time.getDate()
    let hours = Time.getHours()
    let minutes = Time.getMinutes()
    let seconds = Time.getSeconds()
    let setDate = [year,Month,day,hours,minutes,seconds]
    
    let time = setDate.reduce((acc,valItem)=> {
      let len = valItem.toString().length
      if (len ==1) {
        let str = `0${valItem}`
        return acc.concat(str)
      } else {
        return acc.concat(valItem.toString())
      }
    },[])
  
    let dateVal = `${time.splice(0,3).join(formatLeft)} ${time.join(formatRight)}`
    return dateVal
  }
  
  let datas1 = setFormat('/',':')
  console.log(datas1) 

// 方式二：
  function dateFormat(fmt, date) {
    let ret;
    const opt = {
        "Y+": date.getFullYear().toString(),        // 年
        "m+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "H+": date.getHours().toString(),           // 时
        "M+": date.getMinutes().toString(),         // 分
        "S+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            console.log('格式：',ret[1])
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

let date = new Date()
let datas2 = dateFormat("YY年mm月dd日 HH:MM:SS", date)
console.log(datas2)


// 方式三
const DATE_FORMAT_REGEX = /[YmdHis]/g;
const DATE_FORMAT_FUNCTION = (function () {
    const DECIMAL = 2;
    let zeroLeftPad = v => leftPad(v, DECIMAL, '0');

    return {
        Y: (date) => date.getFullYear(),
        m: (date) => zeroLeftPad(date.getMonth() + 1),
        d: (date) => zeroLeftPad(date.getDate()),
        H: (date) => zeroLeftPad(date.getHours()),
        i: (date) => zeroLeftPad(date.getMinutes()),
        s: (date) => zeroLeftPad(date.getSeconds())
    };
}());

/**
 * 时间格式化的函数，简化实现，只支持YmdHis几种关键字
 * @param {*} date   日期对象，或者时间戳（可以是数字或者字符串）
 * @param {String} format 时间格式字符串
 * @returns {String} 返回结果如下：2019-01-20 12:23:34
 */
function encodeDate (date, format = 'Y-m-d H:i:s') {
    let type = typeof date;

    //  时间戳类型
    if (type === 'number') {

        date = date.toString().length === 13 ? date : 1000 * date;
        date = new Date(date);
    } else if (type === 'string') {
        date = decodeDate(date);
    }
    let func = DATE_FORMAT_FUNCTION;
    return (format).replace(DATE_FORMAT_REGEX, (m) => func[m] ? func[m](date) : m);
}
export {
  encodeDate,
  setFormat,
  dateFormat
}